Open() should try to open the device for a specific purpose, which can be either:
0 | Open for data read, as is used by mount() (2), or the user commands dd or cat. |
1 | Open for ioctl commanding, as is used for audio-CD playing programs mostly. |
Notice that any strategic code (closing tray upon open(), etc.) is done by the calling routine in cdrom.c, so the low-level routine should only be concerned with proper initialization and device-use count.